/*                          UX-Framework                               
 *                                                                 
 *  iZE Co.,Ltd. Copyright 2009 All rights reserved.          
 *  This file is distributed under the terms of the GNU Lesser 
 *  General Public License, described in file LICENSE.                                     
 */

package jp.ize.ux;

// {{{ enum KeyMods {
/**
 * 修飾キーの種類です。SHIFT, CTL, ALTはそれぞれシフトキー、コントロールキー、アルトキーを意味します。
 */
enum KeyMods {
	/** シフトキー */
	SHIFT;
	/** コントロールキー */
	CTL;
    /** アルトキー */
	ALT;
}
// }}}
// {{{ enum KeyLocation {
/**
 * キーボードイベントが発生した場所を示します。
 */
enum KeyLocation {
	/** キーの場所が複数ある場合に、その左側のキーである事を示します。 */
	LEFT;
	/** 数値入力キー(テンキー)を示します。 */
	NUMPAD;
	/** キーの場所が複数ある場合に、その右側のキーである事を示します。 */
	RIGHT;
	/** 上記以外の場所によるキー入力である事を示します。 */
	STANDARD;
}
// }}}
// {{{ class UXKeyboardEvent extends UXEvent
/**
 * UXKeyboardEventクラス<br>
 * 低レベルなキーボードイベントを表現するクラスです。<br>
 *
 * @author		iZE Co., Ltd.<br>
 * @version		$Id$<br>
 */
class UXKeyboardEvent extends UXEvent
{
	// {{{ properties
	// {{{ public var KEY_DOWN : String
	/**
	 * キーが押された事を示すイベントです。
	 */
	public static var KEY_DOWN : String = flash.events.KeyboardEvent.KEY_DOWN;
	//public static var KEY_DOWN : String = "__UX_KEYEVNT_DOWN";
	// }}}
	// {{{ public var KEY_UP : String
	/**
	 * キーが戻された事を示すイベントです。
	 */
	public static var KEY_UP : String   = flash.events.KeyboardEvent.KEY_UP;
	//public static var KEY_UP : String = "__UX_KEYEVENT_UP";
	// }}}
	/*
	// {{{ original key event types
	public static var KEY_DOWN : String = "__UX_KEYEVNT_DOWN";
	public static var KEY_UP : String = "__UX_KEYEVENT_UP";
	// }}}
	*/
	// {{{ public var mods(default, default) : Array<KeyMods>
	/**
	 * このイベントが発生した時に押されている修飾キーの配列です。
	 */
	public var mods(default, null) : Array<KeyMods>;
	// }}}
	// {{{ public var location(default, default) : KeyLocation
	/**
	 *
	 */
	public var location(default, null) : KeyLocation;
	// }}}
	// {{{ public var code(default, default) : Int
	/**
	 * このイベントのキーコードを示す値です。キーコードについては、UXKeycodeクラスを参照してください。
	 */
	public var code(default, null) : Int;
	// }}}
	// }}}
	// {{{ public function new( type : String, code : Int, mods : Array<KeyMods>, ?location : KeyLocation )
	/**
	 * コンストラクタ。
	 */
	public function new( type : String, code : Int, mods : Array<KeyMods>, ?location : KeyLocation )
	{
		super(type);
		if( location == null ) {
			location = STANDARD;
		}
	}
	// }}}
}
// }}}
